package com.itbupt.eat.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itbupt.eat.common.R;
import com.itbupt.eat.dto.DishDto;
import com.itbupt.eat.entity.Dish;
import com.itbupt.eat.service.impl.DishFlavorServiceImpl;
import com.itbupt.eat.service.impl.DishServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author BUPT-Dingchang
 * @Create 2024/4/30 11:28
 * ClassName: DishController
 * Description: 菜品的表现层
 */

@Slf4j
@RestController
@RequestMapping("/dish")
public class DishController {

    @Autowired
    private DishServiceImpl dishService;

    @Autowired
    private DishFlavorServiceImpl dishFlavorService;


    /**
     * 添加菜品 同时插入菜品对应的口味数据
     * @param dishDto 菜品信息
     * @return R
     */
    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto) {
        if(dishService.saveWithFlavor(dishDto)) {
            return R.success("添加成功");
        }
        return R.error("添加失败");
    }


    /**
     * 分页查询+按分类名称查询
     * @param page  当前页
     * @param pageSize  每页显示条数
     * @param name  分类名称
     * @return  分页数据
     */
    @GetMapping("/page")
    public R<Page<DishDto>> getPage(Long page, Long pageSize, String name) {
        return R.success(dishService.getPage(page, pageSize, name));
    }


    /**
     * 根据菜品ID查询菜品信息和对应的口味信息
     * @param id  菜品id
     * @return R
     */
    @GetMapping("/{id}")
    public R<DishDto> getById(@PathVariable Long id) {
        return R.success(dishService.getByIdWithFlavor(id));
    }


    /**
     * 修改菜品，同时修改菜品对应的口味数据
     * @param dishDto 菜品信息
     * @return R
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto) {
        if (dishService.updateWithFlavor(dishDto)) {
            return R.success("修改成功");
        }
        return R.error("修改失败");
    }


    /**
     * 菜品起售/停售
     * @param status 状态
     * @param ids 菜品id
     * @return 结果
     */
    @PostMapping("/status/{status}")
    public R<String> updateStatus(@PathVariable Integer status, @RequestParam List<Long> ids) {
        if(dishService.updateStatus(status, ids)) {
            return R.success("修改状态成功");
        }
        return R.error("修改状态失败");
    }


    /**
     * 删除/批量删除菜品
     * @param ids 菜品id
     * @return  结果
     */
    @DeleteMapping
    public R<String> remove(@RequestParam List<Long> ids) {
        if(dishService.removeWithFlavor(ids)) {
            return R.success("删除成功");
        }
        return R.error("删除失败");
    }


    /**
     * 根据指定的过滤条件查询菜品信息
     * @param dish
     * @return
     */
    @GetMapping("/list")
    public R<List<DishDto>> listByCategoryId(Dish dish) {
        return R.success(dishService.listWithFlavor(dish));
    }






}
